cmake_minimum_required(VERSION 3.22)
set (TARGET_NAME myllvmtool)
project(${TARGET_NAME} DESCRIPTION "мой инструмент")

# Этот вызов ключевой. Рассчитывает на то, что переменная LLVM_DIR
# установлена в директорию, где лежит файл LLVMConfig.cmake
find_package(LLVM REQUIRED CONFIG)
# То же для MLIR
find_package(MLIR REQUIRED CONFIG)

# некоторые переменные, используемые в cmake модулях из включаемых ниже
# директорий:
set(MY_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib)
set(MY_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)

include_directories(${LLVM_INCLUDE_DIRS})
separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND
  ${LLVM_DEFINITIONS})
add_definitions(${LLVM_DEFINITIONS_LIST})
add_executable(${TARGET_NAME} src.cpp)

target_include_directories(${TARGET_NAME} PUBLIC ${MY_INCLUDE_DIR})
target_compile_options(${TARGET_NAME} PRIVATE "-fno-rtti")

# Тут перечисляем библиотеки из LLVM, которые хотим использовать.
# В llvm-project они определяются через
# add_llvm_component_library(LLVMIRReader ...)
set (LLVM_LIBS LLVMSupport LLVMIRReader LLVMBitWriter)
# Линкуем наш инструмент с этими библиотеками
target_link_libraries(${TARGET_NAME} ${LLVM_LIBS})

# включим директорию со сборкой llvm opt плагина
add_subdirectory(plugins)

# включим директорию с тестами
add_subdirectory(test)
